package com.zmn.oms.common.utils;

import com.zmn.common.utils.regexp.RegexpUtil;
import com.zmn.common.utils.string.StringUtil;
import org.apache.commons.lang3.StringUtils;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

/**
 * @author ：SongWeidong
 * @date ：2020/6/8 15:14
 * @description：校验电话号码工具类
 */
public class MobileUtil {

    // 用于匹配固定电话号码
    private final static String REGEX_FIXEDPHONE = "^(010|02\\d|0[3-9]\\d{2})?\\d{6,8}$";

    // 用于匹配手机号码
    private final static String REGEX_MOBILE = "1[3,4,5,6,7,8,9]\\d{9}";

    /**
     * 判断是否为固定电话号码
     *
     * @param number 固定电话号码
     * @return
     */
    public static boolean isFixedPhone(String number) {
        Matcher match = Pattern.compile(REGEX_FIXEDPHONE).matcher(number);
        return match.matches();
    }

    /**
     * 隐藏手机号
     *
     * @param mobile
     * @return
     */
    public static String formatHideTel(String mobile) {
        if (StringUtils.isBlank(mobile)) {
            return mobile;
        }

        if (StringUtil.isMobile(mobile)) {
            return mobile.substring(0, 3) + "****" + mobile.substring(7);
        }

        return StringUtil.hideTel(mobile);
    }

    /**
     * 判断是否为隐藏电话号码
     *
     * @param str 电话号码
     * @return
     */
    public static boolean isHideTel(String str) {
        if (StringUtils.isBlank(str)) {
            return false;
        }
        return str.indexOf("*") > 0;
    }

    /**
     * 判断是否为分机电话
     *
     * @param str 电话号码
     * @return
     */
    public static boolean isExtensionPhone(String str) {
        if (StringUtils.isBlank(str)) {
            return false;
        }
        String[] split = str.split("-");
        if (split.length < 2) {
            return false;
        }
        if (StringUtil.isMobile(split[0])) {
            return true;
        }

        return false;
    }

    /**
     * 隐藏文本手机号码
     *
     * @param str 原字符串
     * @return
     */
    public static String formatTextHideTel(String str) {
        if (StringUtils.isBlank(str)) {
            return str;
        }
        Pattern pattern = Pattern.compile(REGEX_MOBILE);
        Matcher matcher = pattern.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            if (matcher.start() != 0 && Character.isDigit(str.charAt(matcher.start() - 1))) {
                continue;
            }
            if (matcher.end() != str.length() && Character.isDigit(str.charAt(matcher.end()))) {
                continue;
            }
            String group = matcher.group();
            matcher.appendReplacement(sb, formatHideTel(group));
        }
        matcher.appendTail(sb);
        return sb.toString();
    }
}
